/**
 * 3η ΓΕ 2013-2014 - Super Market
 * ΦΡΑΓΚΟΥΛΟΠΟΥΛΟΥ ΕΜΜΑΝΟΥΕΛΑ (69298)
 * ΧΑΛΔΑΣ ΧΑΡΑΛΑΜΠΟΣ (69305)
 * ΧΟΡΜΟΒΙΤΗΣ ΙΩΑΝΝΗΣ (69325)
 * ΧΟΥΣΤΟΥΛΑΚΗ ΕΥΑΓΓΕΛΙΑ (69327)
 */
package supermarket;

import customerGUI.PurchaseForm;
import administratorGUI.CustProfileForm;
import administratorGUI.SimulationForm;
import customerGUI.EditProfileForm;
import administratorGUI.ProductsForm;
import customerGUI.ChequesForm;
import customerGUI.ChangePasswordDialog;
import customerGUI.BasketDialog;
import customerGUI.Basket;
import administratorGUI.ProductsPerStoreForm;
import administratorGUI.StoreForm;
import java.awt.Image;
import javax.swing.ImageIcon;
import javax.swing.JOptionPane;
import static javax.swing.JOptionPane.INFORMATION_MESSAGE;

/**
 * Main Form
 */
public class MainForm extends javax.swing.JFrame {

    private final User user;    // Ο χρήστης που έκανε Login

    /**
     * Constructor
     * @param user Ο χρήστης που έκανε Login
     */
    public MainForm(User user) {
        initComponents();
        this.user = user;
        setIcon();
    }

    /**
     * Initialization Οθόνης (Τίτλος & Εμφάνιση / Απόκρυψη Menu)
     */
    public void InitForm() {
        // Τίτλος παραθύρου
        String title = "Super Market: " + this.user.getUserFullName();
        this.setTitle(title);

        // Εμφάνιση / Απόκρυψη Menu
        if (user.isIsAdmin()) {
            menuPurchase.setVisible(false);
            menuProfile.setVisible(false);
            JOptionPane.showMessageDialog(this, "Συνδεθήκατε στην εφαρμογή ως Διαχειριστής.", "Επιτυχής Σύνδεση", INFORMATION_MESSAGE);
        } else {
            menuAdmin.setVisible(false);
            JOptionPane.showMessageDialog(this, "Συνδεθήκατε στην εφαρμογή ως Απλός Χρήστης.", "Επιτυχής Σύνδεση", INFORMATION_MESSAGE);
        }
    }

    /**
    * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        desktop = new javax.swing.JDesktopPane();
        jMenuBar1 = new javax.swing.JMenuBar();
        menuPurchase = new javax.swing.JMenu();
        mnuNewPurchase = new javax.swing.JMenuItem();
        mnuBasket = new javax.swing.JMenuItem();
        jSeparator3 = new javax.swing.JPopupMenu.Separator();
        mnuCustomerDisconnect = new javax.swing.JMenuItem();
        menuProfile = new javax.swing.JMenu();
        mnuEditProfile = new javax.swing.JMenuItem();
        mnuChangePassword = new javax.swing.JMenuItem();
        mnuCheques = new javax.swing.JMenuItem();
        menuAdmin = new javax.swing.JMenu();
        mnuShops = new javax.swing.JMenuItem();
        mnuProducts = new javax.swing.JMenuItem();
        mnuRelations = new javax.swing.JMenuItem();
        mnuCustProfiles = new javax.swing.JMenuItem();
        jSeparator1 = new javax.swing.JPopupMenu.Separator();
        mnuSimulation = new javax.swing.JMenuItem();
        jSeparator2 = new javax.swing.JPopupMenu.Separator();
        mnuAdminDisconnect = new javax.swing.JMenuItem();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setTitle("Super Market");
        setPreferredSize(new java.awt.Dimension(1100, 800));

        javax.swing.GroupLayout desktopLayout = new javax.swing.GroupLayout(desktop);
        desktop.setLayout(desktopLayout);
        desktopLayout.setHorizontalGroup(
            desktopLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 873, Short.MAX_VALUE)
        );
        desktopLayout.setVerticalGroup(
            desktopLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 639, Short.MAX_VALUE)
        );

        menuPurchase.setText("Αγορά");

        mnuNewPurchase.setText("Πραγματοποίηση Αγορών");
        mnuNewPurchase.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                mnuNewPurchaseActionPerformed(evt);
            }
        });
        menuPurchase.add(mnuNewPurchase);

        mnuBasket.setText("Προβολή Καλαθιού");
        mnuBasket.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                mnuBasketActionPerformed(evt);
            }
        });
        menuPurchase.add(mnuBasket);
        menuPurchase.add(jSeparator3);

        mnuCustomerDisconnect.setText("Αποσύνδεση");
        mnuCustomerDisconnect.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                mnuCustomerDisconnectActionPerformed(evt);
            }
        });
        menuPurchase.add(mnuCustomerDisconnect);

        jMenuBar1.add(menuPurchase);

        menuProfile.setText("Διαχείριση Προφίλ");

        mnuEditProfile.setText("Επεξεργασία Προφίλ");
        mnuEditProfile.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                mnuEditProfileActionPerformed(evt);
            }
        });
        menuProfile.add(mnuEditProfile);

        mnuChangePassword.setText("Αλλαγή Κωδικού");
        mnuChangePassword.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                mnuChangePasswordActionPerformed(evt);
            }
        });
        menuProfile.add(mnuChangePassword);

        mnuCheques.setText("Επιταγές");
        mnuCheques.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                mnuChequesActionPerformed(evt);
            }
        });
        menuProfile.add(mnuCheques);

        jMenuBar1.add(menuProfile);

        menuAdmin.setText("Διαχείριση");

        mnuShops.setText("Διαχείριση καταστημάτων");
        mnuShops.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                mnuShopsActionPerformed(evt);
            }
        });
        menuAdmin.add(mnuShops);

        mnuProducts.setText("Διαχείριση προϊόντων");
        mnuProducts.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                mnuProductsActionPerformed(evt);
            }
        });
        menuAdmin.add(mnuProducts);

        mnuRelations.setText("Συσχέτιση προϊόντων και καταστημάτων");
        mnuRelations.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                mnuRelationsActionPerformed(evt);
            }
        });
        menuAdmin.add(mnuRelations);

        mnuCustProfiles.setText("Διαχείριση προφίλ πελατών");
        mnuCustProfiles.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                mnuCustProfilesActionPerformed(evt);
            }
        });
        menuAdmin.add(mnuCustProfiles);
        menuAdmin.add(jSeparator1);

        mnuSimulation.setText("Προσομοίωση Αγορών");
        mnuSimulation.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                mnuSimulationActionPerformed(evt);
            }
        });
        menuAdmin.add(mnuSimulation);
        menuAdmin.add(jSeparator2);

        mnuAdminDisconnect.setText("Αποσύνδεση");
        mnuAdminDisconnect.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                mnuAdminDisconnectActionPerformed(evt);
            }
        });
        menuAdmin.add(mnuAdminDisconnect);

        jMenuBar1.add(menuAdmin);

        setJMenuBar(jMenuBar1);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(desktop)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(desktop)
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    // <editor-fold defaultstate="collapsed" desc="Menu: Διαχείριση"> 
    /**
     * Διαχείριση - Επιλογή 1 (Διαχείριση καταστημάτων)
     * @param evt 
     */
    private void mnuShopsActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_mnuShopsActionPerformed
        StoreForm form = new StoreForm();
        desktop.add(form);       
        form.setVisible(true);
    }//GEN-LAST:event_mnuShopsActionPerformed

    /**
     * Διαχείριση - Επιλογή 2 (Διαχείριση προϊόντων)
     * @param evt 
     */
    private void mnuProductsActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_mnuProductsActionPerformed
        ProductsForm form = new ProductsForm();
        desktop.add(form);
        form.setVisible(true);
    }//GEN-LAST:event_mnuProductsActionPerformed
	
    /**
     * Διαχείριση - Επιλογή 3 (Συσχέτιση προϊόντων και καταστημάτων)
     * @param evt 
     */
    private void mnuRelationsActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_mnuRelationsActionPerformed
        ProductsPerStoreForm form = new ProductsPerStoreForm();
        desktop.add(form);
        form.setVisible(true);
    }//GEN-LAST:event_mnuRelationsActionPerformed

    /**
     * Διαχείριση - Επιλογή 4 (Διαχείριση προφίλ πελατών)
     * @param evt 
     */
    private void mnuCustProfilesActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_mnuCustProfilesActionPerformed
        CustProfileForm form = new CustProfileForm();
        desktop.add(form);
        form.setVisible(true);
    }//GEN-LAST:event_mnuCustProfilesActionPerformed

    /**
     * Διαχείριση - Επιλογή 5 (Προσομοίωση Αγορών)
     * @param evt 
     */
    private void mnuSimulationActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_mnuSimulationActionPerformed
        SimulationForm form = new SimulationForm();
        desktop.add(form);
        form.setVisible(true);
    }//GEN-LAST:event_mnuSimulationActionPerformed

    /**
     * Διαχείριση - Επιλογή 6 (Αποσύνδεση)
     * @param evt 
     */
	private void mnuAdminDisconnectActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_mnuAdminDisconnectActionPerformed
        disconnect();
    }//GEN-LAST:event_mnuAdminDisconnectActionPerformed
    // </editor-fold>

    // <editor-fold defaultstate="collapsed" desc="Menu: Διαχείριση Προφίλ"> 

    /**
     * Διαχείριση Προφίλ - Επιλογή 1 (Επεξεργασία Προφίλ)
     * @param evt 
     */
    private void mnuEditProfileActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_mnuEditProfileActionPerformed
        EditProfileForm form = new EditProfileForm(this);
        form.setCustomer(this.user.getCustomer());
        desktop.add(form);
        form.setVisible(true);
    }//GEN-LAST:event_mnuEditProfileActionPerformed

    /**
     * Διαχείριση Προφίλ - Επιλογή 2 (Αλλαγή Κωδικού)
     * @param evt 
     */
	private void mnuChangePasswordActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_mnuChangePasswordActionPerformed
        ChangePasswordDialog cp = new ChangePasswordDialog(this, true);
        cp.setCustomer(user.getCustomer());
        cp.setLocationRelativeTo(this);
        cp.setVisible(true);
    }//GEN-LAST:event_mnuChangePasswordActionPerformed
	
    /**
     * Διαχείριση Προφίλ - Επιλογή 3 (Επιταγές)
     * @param evt 
     */
    private void mnuChequesActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_mnuChequesActionPerformed

        ChequesForm form = new ChequesForm(user.getCustomer());
        desktop.add(form);
        form.setVisible(true);
    }//GEN-LAST:event_mnuChequesActionPerformed
    // </editor-fold>

    // <editor-fold defaultstate="collapsed" desc="Menu: Αγορές"> 
    /**
     * Αγορές - Επιλογή 1 (Πραγματοποίηση Αγορών)
     * @param evt 
     */
    private void mnuNewPurchaseActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_mnuNewPurchaseActionPerformed
        PurchaseForm form = new PurchaseForm();
        form.setCustomer(this.user.getCustomer());
        desktop.add(form);
        form.setVisible(true);
    }//GEN-LAST:event_mnuNewPurchaseActionPerformed

    /**
     * Αγορές - Επιλογή 2 (Καλάθι Αγορών)
     * @param evt 
     */
    private void mnuBasketActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_mnuBasketActionPerformed
        BasketDialog bd = new BasketDialog(this, true);
        bd.setCustomer(this.user.getCustomer());
        bd.setLocationRelativeTo(this);
        bd.setVisible(true);
        Basket b = Basket.getInstance();
        this.setTitle(b.getStatus());
    }//GEN-LAST:event_mnuBasketActionPerformed

    /**
     * Αγορές - Επιλογή 3 (Αποσύνδεση)
     * @param evt 
     */
    private void mnuCustomerDisconnectActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_mnuCustomerDisconnectActionPerformed
        disconnect();
    }//GEN-LAST:event_mnuCustomerDisconnectActionPerformed
    // </editor-fold>

    /**
     * Αποσύνδεση από την εφαρμογή και επιστροφή στην οθόνη Login
     */
    public void disconnect() {
        dispose();
        LoginDialog login = new LoginDialog(null, false);
        login.setVisible(true);
    }
    
    /**
     * Icon παραθύρου
     */
    private void setIcon() {
        String path;
        path = "/resources/icons/basket.png";
        Image img = new ImageIcon(this.getClass().getResource(path)).getImage();
        this.setIconImage(img);
    }

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JDesktopPane desktop;
    private javax.swing.JMenuBar jMenuBar1;
    private javax.swing.JPopupMenu.Separator jSeparator1;
    private javax.swing.JPopupMenu.Separator jSeparator2;
    private javax.swing.JPopupMenu.Separator jSeparator3;
    private javax.swing.JMenu menuAdmin;
    private javax.swing.JMenu menuProfile;
    private javax.swing.JMenu menuPurchase;
    private javax.swing.JMenuItem mnuAdminDisconnect;
    private javax.swing.JMenuItem mnuBasket;
    private javax.swing.JMenuItem mnuChangePassword;
    private javax.swing.JMenuItem mnuCheques;
    private javax.swing.JMenuItem mnuCustProfiles;
    private javax.swing.JMenuItem mnuCustomerDisconnect;
    private javax.swing.JMenuItem mnuEditProfile;
    private javax.swing.JMenuItem mnuNewPurchase;
    private javax.swing.JMenuItem mnuProducts;
    private javax.swing.JMenuItem mnuRelations;
    private javax.swing.JMenuItem mnuShops;
    private javax.swing.JMenuItem mnuSimulation;
    // End of variables declaration//GEN-END:variables
}
